/**
 * web-upload 工具类
 * 
 * 约定：
 * 上传按钮的id = 图片隐藏域id + 'BtnId'
 * 图片预览框的id = 图片隐藏域id + 'PreId'
 * 
 * @author fengshuonan
 */
(function() {
	
	var $WebUploadExecl = function(pictureId) {
		this.pictureId = pictureId;
		this.uploadBtnId = pictureId + "BtnId";
		this.uploadPreId = pictureId + "PreId";
		this.uploadUrl = Feng.ctxPath + '/initialOrder/uploadExecl';
		this.fileSizeLimit = 100 * 1024 * 1024;
		this.picWidth = 800;
		this.picHeight = 800;
        this.uploadBarId = null;
	};

	$WebUploadExecl.prototype = {
		/**
		 * 初始化webUploader
		 */
		init : function() {
			var uploader = this.create();
			this.bindEvent(uploader);
			return uploader;
		},

		/**
		 * 创建webuploader对象
		 */
		create : function() {
			var webUploader = WebUploader.create({
				auto : true,
				pick : {
					id : '#' + this.uploadBtnId,
					multiple : false,// 只上传一个
				},
				accept : {
					title : 'Images',
					extensions : 'xlsx',
                    mimeTypes : 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
				},
				swf : Feng.ctxPath
						+ '/static/js/plugins/webuploader/Uploader.swf',
				disableGlobalDnd : true,
				duplicate : true,
                server : this.uploadUrl,
				fileSingleSizeLimit : this.fileSizeLimit
			});

			return webUploader;
		},

		/**
		 * 绑定事件
		 */
		bindEvent : function(bindedObj) {
			var me =  this;
			bindedObj.on('fileQueued', function(file) {
                var $li = $( '#progress')
                    $li.append('<p class="state">上传...</p>');
			});

            //当文件被加入队列之前触发
            bindedObj.on('beforeFileQueued', function (file) {
                if ($("#transferId").val() == '') {
                    Feng.error("上游网点不能为空");
                    return false;
                }
                if ($("#driverId").val() == '') {
					Feng.error("司机不能为空");
					return false;
				}
                if ($("#car_no").val() == '') {
                    Feng.error("车牌号码不能为空");
                    return false;
                }
                if ($("#arrive_date").val() == '') {
                    Feng.error("到达日期不能为空");
                    return false;
                }
            });

            //当某个文件的分块在发送前触发，主要用来询问是否要添加附带参数，大文件在开起分片上传的前提下此事件可能会触发多次。
            bindedObj.on('uploadBeforeSend', function (obj, data, headers) {
                data.driver_name = $("#driver_name").val();
                data.car_no = $("#car_no").val();
                data.arrive_date = $("#arrive_date").val();
                data.phone = $("#phone").val();
                data.driverId = $("#driverId").val();
                data.transferId = $("#transferId").val();
            });

			// 文件上传过程中创建进度条实时显示。
			bindedObj.on('uploadProgress', function(file, percentage) {
                var $li = $( '#progress'),
                $percent = $li.find('.progress .progress-bar');

                // 避免重复创建
                if ( !$percent.length ) {
                    $percent = $('<div class="progress progress-striped active">' +
                        '<div class="progress-bar" role="progressbar" style="width: 0%">' +
                        '</div>' +
                        '</div>').appendTo( $li ).find('.progress-bar');
                }

                $li.find('p.state').text('上传中');

                $percent.css( 'width', percentage * 100 + '%' );
			});

			// 文件上传成功，给item添加成功class, 用样式标记上传成功。
			bindedObj.on('uploadSuccess', function(file,response) {
                var$li = $( '#progress')
				Feng.success("文件上传成功");
                //$li.find('p.state').text('上传完成');
                $('#progress').html('');
                if(response.FAILUER>0){
                    $('#failure_result').show();
                    $('#failure_success').html(response.SUCCESS);
                    $('#failure_failure').html(response.FAILUER);
                    // $('#failure_zt').html(response.ZT);
                    // $('#failure_ps').html(response.PS);
                    // $('#failure_zz').html(response.ZZ);
                    $('#batch_no').val(response.BATCH_NO);
                    if(response.FAILUER>0){
                        $('#failure_list').show();
                    }

				}else{
                    $('#success_result').show();
                    $('#success').html(response.SUCCESS);
                    $('#zt').html(response.ZT);
                    $('#ps').html(response.PS);
                    $('#zz').html(response.ZZ);
                    $('#batch_no').val(response.BATCH_NO);
                    // $('#failure').html(response.FAILUER);
				}


			});

			// 文件上传失败，显示上传出错。
			bindedObj.on('uploadError', function(file) {
                var $li = $( '#progress')
				Feng.error("上传失败");
                $li.find('p.state').text('上传失败');
                $('#progress').html('');
			});

			// 其他错误
			bindedObj.on('error', function(type) {
				if ("Q_EXCEED_SIZE_LIMIT" == type) {
					Feng.error("文件大小超出了限制");
				} else if ("Q_TYPE_DENIED" == type) {
					Feng.error("文件类型不满足");
				} else if ("Q_EXCEED_NUM_LIMIT" == type) {
					Feng.error("上传数量超过限制");
				} else if ("F_DUPLICATE" == type) {
					Feng.error("图片选择重复");
				} else {
					Feng.error("上传过程中出错");
				}
			});

			// 完成上传完了，成功或者失败
			bindedObj.on('uploadComplete', function(file) {
			});
		},

        /**
         * 设置图片上传的进度条的id
         */
        setUploadBarId: function (id) {
            this.uploadBarId = id;
        }
	};

	window.$WebUploadExecl = $WebUploadExecl;

}());